package com.example.snackbar;

import androidx.appcompat.app.AppCompatActivity;
import androidx.coordinatorlayout.widget.CoordinatorLayout;

import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.example.snackbar.databinding.ActivityMainBinding;
import com.example.snackbar.utils.ColoredSnackbar;
import com.example.snackbar.utils.SnackbarUtil;
import com.google.android.material.snackbar.Snackbar;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private ActivityMainBinding binding;
    private Snackbar mSn1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());
        initView();
    }

    private void initView() {
        binding.btn1.setOnClickListener(this);
        binding.btn2.setOnClickListener(this);
        binding.btn3.setOnClickListener(this);
        binding.btn4.setOnClickListener(this);
        binding.btn5.setOnClickListener(this);
        binding.btn6.setOnClickListener(this);
        binding.btn7.setOnClickListener(this);
        binding.btn8.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn1:
                //最基本的使用方式，同Toast
                Snackbar.make(binding.btn1, "hello snack bar", Snackbar.LENGTH_SHORT).show();
                break;
            case R.id.btn2:
                //添加action动作的SnackBar
                Snackbar.make(binding.btn2, "hello Snack action", Snackbar.LENGTH_SHORT)
                        .setAction("action", new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                //do sth...
                                Snackbar.make(binding.btn2, "你真棒！！！", Snackbar.LENGTH_SHORT).show();
                            }
                        }).show();
                break;
            case R.id.btn3:
                //添加监听的SnackBar
                Snackbar.make(binding.btn3, "添加监听", Snackbar.LENGTH_SHORT)
                        .setAction("action", new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                //do sth...
                                Snackbar.make(binding.btn3, "你真棒！！！", Snackbar.LENGTH_SHORT).show();
                            }
                        })
                        .addCallback(new Snackbar.Callback() {
                            @Override
                            public void onDismissed(Snackbar transientBottomBar, int event) {
                                super.onDismissed(transientBottomBar, event);
                                Toast.makeText(MainActivity.this, "Snackbar隐藏", Toast.LENGTH_SHORT).show();
                            }

                            @Override
                            public void onShown(Snackbar sb) {
                                super.onShown(sb);
                                Toast.makeText(MainActivity.this, "Snackbar显示", Toast.LENGTH_SHORT).show();
                            }

                        })
                        .show();
                break;
            case R.id.btn4:
                //相关属性，可以把动态设置
                Snackbar snackbar = Snackbar.make(binding.ll, "Action 被点击", Snackbar.LENGTH_SHORT);
                snackbar.setText("动态文本");//动态设置文本显示内容
                snackbar.setTextColor(Color.RED);
                snackbar.setActionTextColor(Color.RED);//动态设置Action文本的颜色
                snackbar.setAction("action", new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Snackbar.make(v, "i am action", Snackbar.LENGTH_SHORT).show();
                    }
                });
                snackbar.setDuration(5000);//动态设置显示时间
                //获取显示文本View,并设置其显示颜色
                View view = snackbar.getView();
                ((TextView) view.findViewById(R.id.snackbar_text)).setTextColor(Color.BLUE);

                View snackbarView = snackbar.getView();//获取Snackbar显示的View对象
                //获取显示文本View,并设置其显示颜色
                ((TextView) snackbarView.findViewById(com.google.android.material.R.id.snackbar_text)).setTextColor(Color.YELLOW);
                //获取Action文本View，并设置其显示颜色
                ((TextView) snackbarView.findViewById(com.google.android.material.R.id.snackbar_action)).setTextColor(Color.YELLOW);
                //设置Snackbar的背景色
                snackbarView.setBackgroundColor(Color.GREEN);

                //设置Snackbar显示的位置(注意：如果这里的父view不是CoordinatorLayout的话，这个设置位置的效果是不能生效的)
                ViewGroup.LayoutParams params = snackbarView.getLayoutParams();
                CoordinatorLayout.LayoutParams layoutParams = new CoordinatorLayout.LayoutParams(params.width, params.height);
                layoutParams.gravity = Gravity.CENTER_VERTICAL;//垂直居中
                snackbarView.setLayoutParams(layoutParams);
                snackbar.show();
                break;
            case R.id.btn5:
                mSn1 = Snackbar.make(binding.btn5, "添加监听", Snackbar.LENGTH_SHORT)
                        .setText("设置颜色")
                        .setBackgroundTint(Color.YELLOW)
                        .setAction("color", new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                Toast.makeText(MainActivity.this, "color", Toast.LENGTH_SHORT).show();
                            }
                        })
                        .setActionTextColor(getResources().getColor(R.color.colorPrimary))
                        .setDuration(5000);
                //设置Snackbar颜色的方法，上个按钮中已经有了
                setSnackbarMessageTextColor(mSn1, Color.RED);
                //这个按钮的重点是这个方法，添加view
                SnackbarAddView(mSn1, R.layout.snackbar_addview, 0);
                mSn1.show();
                break;
            case R.id.btn6:
                mSn1 = Snackbar.make(binding.btn5, "工具类ColoredSnackbar", Snackbar.LENGTH_SHORT);
                ColoredSnackbar.alert(mSn1).show();
                ColoredSnackbar.confirm(mSn1).show();
                ColoredSnackbar.info(mSn1).show();
                ColoredSnackbar.warning(mSn1).show();
                break;
            case R.id.btn7:
                Snackbar.make(binding.ll, "已删除一个会话", Snackbar.LENGTH_SHORT).setAction("撤销", new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                    }
                }).addCallback(new Snackbar.Callback() {
                    @Override
                    public void onDismissed(Snackbar snackbar, int event) {

                        switch (event) {

                            case Snackbar.Callback.DISMISS_EVENT_CONSECUTIVE://新的Snackbar出现导致旧的消失
                            case Snackbar.Callback.DISMISS_EVENT_MANUAL://调用了dismiss方法导致消失
                            case Snackbar.Callback.DISMISS_EVENT_SWIPE://滑动导致消失
                                //TODO 网络操作
                                Toast.makeText(MainActivity.this, "滑出去", Toast.LENGTH_SHORT).show();
                                break;
                            case Snackbar.Callback.DISMISS_EVENT_TIMEOUT://设置的显示时间到了导致消失
                                //TODO 网络操作
                                Toast.makeText(MainActivity.this, "删除成功", Toast.LENGTH_SHORT).show();
                                break;
                            case Snackbar.Callback.DISMISS_EVENT_ACTION://点击了右侧按钮导致消失
                                Toast.makeText(MainActivity.this, "撤销了删除操作", Toast.LENGTH_SHORT).show();
                                break;

                        }
                    }

                    @Override
                    public void onShown(Snackbar snackbar) {
                        super.onShown(snackbar);
                        Log.i("zxd", "onShown");
                    }
                }).show();
                break;
            case R.id.btn8:
                //SnackbarUtil.IndefiniteSnackbar(binding.btn8, "hello", 1000, SnackbarUtil.Confirm).show();
                mSn1 = Snackbar.make(binding.btn5, "为message添加icon", Snackbar.LENGTH_INDEFINITE).setDuration(2500);
                SnackbarUtil.snackbarAddMessageIcon(mSn1, R.mipmap.ic_launcher_round);
                break;
        }
    }

    /***
     * 为snackbar添加view
     * @param snackbar
     * @param layoutId
     * @param index
     */
    public void SnackbarAddView(Snackbar snackbar, int layoutId, int index) {
        //获取snackbar的View(其实就是SnackbarLayout)
        View snackbarview = snackbar.getView();
        //将获取的View转换成SnackbarLayout
        Snackbar.SnackbarLayout snackbarLayout = (Snackbar.SnackbarLayout) snackbarview;
        // 加载布局文件新建View
        View add_view = LayoutInflater.from(snackbarview.getContext()).inflate(layoutId, null);
        //设置新建布局参数
        LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        // 设置新建布局在Snackbar内垂直居中显示
        p.gravity = Gravity.CENTER_VERTICAL;
        // 将新建布局添加进snackbarLayout相应位置}
        snackbarLayout.addView(add_view, index, p);
    }

    /**
     * 设置SnackBar消息的颜色
     *
     * @param snackbar
     * @param color
     */
    public void setSnackbarMessageTextColor(Snackbar snackbar, int color) {
        //获取显示文本View,并设置其显示颜色
        View view = snackbar.getView();
        ((TextView) view.findViewById(R.id.snackbar_text)).setTextColor(color);
//        ((TextView) view.findViewById(android.support.design.R.id.snackbar_text)).setTextColor(Color.BLUE);
//        ((TextView) view.findViewById(com.google.android.material.R.id.snackbar_text)).setTextColor(Color.YELLOW);
    }
}
